package leetcode.segmentTree.p303;

/**
 * 
 * @Title: Solution.java 
 * @Package leetcode.segmentTree 
 * @Description: 303. 区域和检索 - 数组不可变
 *                  计算数组的前n项和，保存到一个数组中，
 *                  然后返回前j项和减去前i-1项和
 * @author CandyWall   
 * @date 2021年1月10日 下午1:10:10 
 * @version V1.0
 */
public class NumArray_v3 {
    private int[] sums; // sums[i]存储前i个元素的和， sum[0] = 0，
                        // sums[i]存储nums[0...i-1]
    public NumArray_v3(int[] nums) {
        sums = new int[nums.length + 1];
        sums[0] = 0;
        for(int i = 1; i < sums.length; i++) {
            sums[i] = sums[i - 1] + nums[i - 1];
        }
    }
    
    public int sumRange(int i, int j) {
        return sums[j + 1] - sums[i];
    }
    
    public static void main(String[] args) {
        int[] nums = {-2, 0, 3, -5, 2, -1};
        System.out.println(new NumArray_v3(nums).sumRange(2, 5));
    }
}
